性能优化技巧

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


可用性能工具

工具

用途

示例命令

top

查看进程、CPU、内存实时占用

top -b -n 1

ps

按 CPU 或内存排序查看进程

ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%cpu

uptime

查看运行时间与系统负载

uptime

mpstat

查看整体 CPU 利用率

mpstat 1 2

vmstat

查看 CPU、内存、swap、I/O 粗略状态

vmstat 1 2

free

查看内存与 swap 使用情况

free -h

iostat

查看块设备 I/O 统计

iostat -d -k 1 2

df

查看文件系统空间占用

df -h

du

查看目录占用

du -sh /data/*

lscpu

查看 CPU 架构与频率信息

lscpu

lsblk

查看块设备和挂载关系

lsblk

sysctl

查看内核参数

sysctl vm.swappiness

systemctl

查看服务状态

systemctl --failed --no-pager

journalctl

查看服务或系统日志

journalctl -p err -n 50 --no-pager

ping

基础网络连通性测试

ping -c 3 127.0.0.1

系统性能监控

查看整体负载

先用 uptime 查看系统运行时间和 load average:

adb shell 'uptime'

示例输出中包含 load average。如果 load average 长时间明显高于 CPU 核数,需要进一步查看 CPU、I/O 或进程占用。

查看进程 CPU 与内存占用

使用 top 查看当前系统进程、CPU、内存概况:

adb shell 'top -b -n 1 | head -20'

如果要快速定位 CPU 占用较高的进程,可以使用:

adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%cpu | head -12'

如果要按内存占用排序,可以使用:

adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%mem | head -12'

查看 CPU 使用率

mpstat 可用于观察 CPU 的用户态、内核态、I/O 等待和空闲比例:

adb shell 'mpstat 1 2'

本次实测中,mpstat 可正常运行,示例平均空闲比例约 92% 以上,说明测试时系统整体 CPU 压力不高。

查看 CPU 频率和调度策略

当前开发板 CPU0-7 均在线,可通过以下命令查看:

adb shell 'cat /sys/devices/system/cpu/online'

查看当前 CPU governor:

adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done'

CPU0-7 的 governor 均为 performance。可用 governor 包含 userspaceondemandwaltconservativepowersaveperformanceschedutil

查看当前频率:

adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done'

本次实测中,CPU0-3 当前约为 1804800 kHz,CPU4-7 当前约为 2016000 kHz。

内存与 Swap 监控

查看内存使用情况

使用 free 查看内存、cache 和 swap 使用情况:

adb shell 'free -h'

本次实测中,系统总内存约 3.5 GiB,available 约 2.4 GiB,swap 约 1.8 GiB 且未明显使用。

查看 vmstat

vmstat 可以快速观察运行队列、内存、swap、I/O 和 CPU 使用情况:

adb shell 'vmstat 1 2'

重点关注:

  • r:运行队列,持续偏高时说明 CPU 可能繁忙。

  • si / so:swap in/out,持续非零说明内存压力较大。

  • wa:I/O wait,持续偏高说明存储 I/O 可能成为瓶颈。

  • id:CPU idle,持续较低说明 CPU 利用率较高。

查看 zram swap

当前系统使用 /dev/zram0 作为 swap,可通过以下命令查看:

adb shell 'cat /proc/swaps; zramctl 2>/dev/null || true'

本次实测中,/dev/zram0 大小约 1.8 GiB,优先级为 32758,当前几乎未使用。

存储 I/O 与空间检查

查看文件系统空间

使用 df 查看各挂载点空间占用:

adb shell 'df -h'

本次实测中,根文件系统 / 约 7.8 GiB,已使用约 4.1 GiB;/data 约 40 GiB,剩余空间较充足。较大的日志、测试文件和临时数据建议优先放到 /data/tmp,避免占满根文件系统。

查看目录占用

需要定位大文件或大目录时,可以使用:

adb shell 'du -sh /data/* 2>/dev/null | sort -h | tail -20'

如果排查根文件系统空间,可改为检查 /var/usr/opt 等目录。

查看块设备

使用 lsblk 查看块设备、分区和挂载点:

adb shell 'lsblk'

当前设备主存储为 mmcblk0,系统分区、缓存分区、数据分区均挂载在该块设备的不同分区上。

查看 I/O 统计

当前开发板上的 iostat 为 BusyBox 版本,不支持 -x 扩展参数。可使用以下命令查看基础块设备 I/O:

adb shell 'iostat -d -k 1 2'

如果需要观察 CPU 与 I/O 的组合状态,可结合 vmstat 1 2 一起查看。

网络状态检查

当前开发板可使用 ipping 做基础网络检查:

adb shell 'ip -br addr; ip route'

本次实测中,wlan0p2p0 处于 DOWN 状态,未看到默认路由。因此当前不适合写入外网吞吐或网络带宽测试流程。

本地回环连通性可用以下命令验证:

adb shell 'ping -c 3 -W 1 127.0.0.1'

本次实测中,回环地址 ping 测试 0% 丢包,可用于确认基础网络栈工作正常。

服务与日志排查

查看失败服务

服务异常会影响启动速度、后台资源占用和功能稳定性。可以先查看失败服务:

adb shell 'systemctl --failed --no-pager'

本次实测中存在若干 failed 服务,例如 camera_cgroup.servicelefbe.servicepulseaudio.serviceqwesd.servicethermal-engine.service 等。具体是否需要优化或关闭,应结合对应功能需求判断。

查看错误日志

查看最近的错误日志:

adb shell 'journalctl -p err -n 50 --no-pager'

如需查看某个服务的日志,可使用:

adb shell 'journalctl -u 服务名 --no-pager -n 100'

排查服务类性能问题时,建议先确认服务是否反复重启、阻塞启动或持续打印错误日志。

内核参数查看

当前系统可用 sysctl 查看部分内核参数:

adb shell 'sysctl kernel.kptr_restrict kernel.perf_event_paranoid vm.swappiness vm.dirty_ratio vm.dirty_background_ratio net.core.rmem_max net.core.wmem_max'

本次实测值包括:

  • kernel.kptr_restrict = 2

  • kernel.perf_event_paranoid = 2

  • vm.swappiness = 100

  • vm.dirty_ratio = 20

  • vm.dirty_background_ratio = 10

  • net.core.rmem_max = 1048576

  • net.core.wmem_max = 1048576

修改内核参数会影响系统行为,正式修改前应结合具体问题评估,并保留原始值以便回退。

进程优先级和 CPU 亲和性

当前系统可使用 nicereniceionicetaskset。这些工具适合在调试阶段临时调整进程优先级或 CPU 亲和性。

查看命令是否存在

adb shell 'command -v taskset; command -v nice; command -v renice; command -v ionice'

示例:指定 CPU 运行命令

adb shell 'taskset -c 0-3 命令'

示例:调整进程优先级

adb shell 'renice -n 5 -p 进程PID'

这些命令会改变进程调度行为,建议只在明确知道目标进程和测试目的时使用。

温度状态查看

可以通过 thermal sysfs 查看各温区温度:

adb shell 'for z in /sys/class/thermal/thermal_zone*; do [ -e "$z/type" ] && printf "%s " "$(cat "$z/type")" && cat "$z/temp" 2>/dev/null; done | head -40'

本次实测中可读取到 cpu-1-0cpu-1-1cpu-1-2gpuwlanvideo 等温区。温度值通常以毫摄氏度显示,例如 50800 表示约 50.8°C。

优化排查流程

  1. 先执行 uptimetop -b -n 1,判断系统是否整体繁忙。

  2. 如果 CPU 高,使用 ps --sort=-%cpumpstat 定位进程与 CPU 使用率。

  3. 如果内存紧张,使用 free -hvmstat 1 2cat /proc/swaps 查看 available、swap 和 zram 状态。

  4. 如果系统卡顿但 CPU 不高,使用 vmstatiostat -d -k 1 2 判断是否存在 I/O 等待或存储访问压力。

  5. 如果启动慢或后台异常,使用 systemctl --failedjournalctl -p err 查看失败服务和错误日志。

  6. 如果怀疑过热降频,查看 scaling_cur_freqscaling_governor 和 thermal zone 温度。

  7. 如果涉及网络问题,先确认 ip -br addrip route,再进行连通性测试。

注意事项

  • 本文只保留当前开发板实测可用的工具和命令。

  • 当前系统未纳入 perfhtopsarpidstatstress-ngsysbench 等工具流程。

  • 当前 iperf3 命令存在依赖库缺失问题,不纳入本文网络吞吐测试流程。

  • 涉及 governor、sysctl、renice、ionice、服务启停等操作时,应先明确测试目的并记录修改前状态。

  • 正式优化建议一次只改一个变量,修改前后分别记录 topvmstatmpstatiostatjournalctl 等结果,避免无法判断是哪项修改产生影响。

总结

当前开发板可以使用基础 Linux 工具完成 CPU、内存、存储、服务、日志、温度和基础网络状态排查。建议性能优化时先用只读命令确认瓶颈来源,再按 CPU、内存、I/O、服务、日志和温度方向逐项收敛。对于当前系统暂不可用或依赖不完整的工具,不应直接写入常规操作流程。